package com.iwhalecloud.citybrain.flow.platform.manager.infrastructure.mapper;

import com.iwhalecloud.citybrain.flow.platform.manager.infrastructure.entities.FlowReTaskNoticeChannel;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.notice.FlowReNoticeInfo;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.notice.FlowReNoticeInfoQueryVo;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.notice.NoticeInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author wuliepeng
 * @date 2019-07-12
 */
public interface NoticeTemplateDAO {

    /**
     * 保存多条通知渠道记录
     *
     * @param flowReTaskNoticeChannels
     * @return
     */
    int insertTaskNoticeChannelBatch(@Param("flowReTaskNoticeChannels") List<FlowReTaskNoticeChannel> flowReTaskNoticeChannels);

    /**
     * 查询需要复制的flow_re_timeout_setting数据
     *
     * @param flowReNoticeInfoQueryVo
     * @return
     */
    List<FlowReNoticeInfo> listNeedCopyReNoticeInfo(FlowReNoticeInfoQueryVo flowReNoticeInfoQueryVo);

    /**
     * 查询需要复制的flow_re_timeout_setting数据, 针对流程高级配置的超时和预警
     *
     * @param flowReNoticeInfoQueryVo
     * @return
     */
    List<FlowReNoticeInfo> listNeedCopyReNoticeInfoForProcess(FlowReNoticeInfoQueryVo flowReNoticeInfoQueryVo);

    /**
     * 更新已存在的通知, 给接口设置的数据更新taskId
     *
     * @param flowReNoticeInfoQueryVo
     */
    void updateRuNoticeInfo(FlowReNoticeInfoQueryVo flowReNoticeInfoQueryVo);

    /**
     * 更新已存在的通知渠道, 给接口设置的数据更新taskId
     *
     * @param flowReNoticeInfoQueryVo
     */
    void updateRuNoticeChannel(FlowReNoticeInfoQueryVo flowReNoticeInfoQueryVo);

    /**
     * 查询任务处理通知列表
     *
     * @param flowReNoticeInfoQueryVo
     * @return
     */
    List<NoticeInfo> listTaskHandleNotice(FlowReNoticeInfoQueryVo flowReNoticeInfoQueryVo);

    /**
     * 查询需要进行通知的超时和预警通知
     *
     * @return
     */
    List<FlowReNoticeInfo> listNeedNotifyTimeoutAndWarningNotice(@Param("procId") String procId);

    /**
     * 查询需要进行通知的超时和预警通知通过ID
     *
     * @return
     */
    FlowReNoticeInfo getNeedNotifyTimeoutAndWarningNoticeById(@Param("id") Long id);

    /**
     * 更新已发的通知，设置为不再进行通知
     *
     * @param noticeIds
     * @return
     */
    Integer updateNotice(@Param("noticeIds") List<Long> noticeIds);

    /**
     * 更新通知发送是否成功状态 Y-成功 N-失败
     * @param id
     * @param status Y or N
     */
    void updateSendStatus(@Param("id") String id, @Param("status") String status);

    /**
     * 根据ruNoticeChannelId获取通知消息信息
     * @param ruNoticeChannelId
     */
    NoticeInfo getNoticeInfoByRuNoticeChannelId(@Param("ruNoticeChannelId") String ruNoticeChannelId);
}